<?php

class Zasob extends My_Model_Abstract {
	
	protected $iId;
	protected $iIdRodzica;
	protected $sNazwa;
	protected $iTyp;
	protected $iPrawo;
	
	public function getId() {
		return $this->iId;
	}

	public function getIdRodzica() {
		return $this->iIdRodzica;
	}

	public function getNazwa() {
		return $this->sNazwa;
	}
	
	public function getTyp() {
		return $this->iTyp;
	}
	
	public function getPrawo() {
		return $this->iPrawo;
	}
	
	public function __construct($iId) {
		$oZasob = My_Db::factory('db_Zasob');
		$oUprawnienie = My_Db::factory('db_Uprawnienie');
		$oSesja = new Zend_Session_Namespace( 'zalogowanyUzytkownik' );
		
		$sQuery = $oZasob->select()->where('id_zasobu = ?', $iId)->where('usuniety = ?', 0);

		$oRow = $oZasob->fetchRow($sQuery);
		
		if($oRow != null) {
			$this->iId = $oRow->id_zasobu;
			$this->iIdRodzica = $oRow->id_rodzica;
	    	$this->sNazwa = $oRow->nazwa;
	    	$this->iTyp = $oRow->typ;
	    	
	    	$sSubQuery = $oUprawnienie->select()->where('id_zasobu = ?', $oRow->id_zasobu)->where('id_uzytkownika = ?', $oSesja->oUzytkownik->getId());
	    	$oSubRow = $oUprawnienie->fetchRow($sSubQuery);
	    	
	    	if($oSesja->oUzytkownik->getRole() == 'admin')
	    		$this->iPrawo = 2;
    		elseif($oSesja->oUzytkownik->getId() == $oRow->id_wlasciciela)
    			$this->iPrawo = 2;
   			elseif($oSubRow != null)
   				$this->iPrawo = 1;
			else
				$this->iPrawo = 0;
		} else
			return false;
	}
	
	public static function zrobDrzewo(&$aDrzewo, $iIdRodzica) {
		$oZasob = My_Db::factory('db_Zasob');
		$sQuery = $oZasob->select()->where('id_rodzica = ?', $iIdRodzica)->where('usuniety = ?', 0);
		$oRowset = $oZasob->fetchAll($sQuery);
		if($oRowset != null) {
			$i = 0;
			foreach($oRowset as $oRow) {
				$aDrzewo[$i]['zasob'] = new Zasob($oRow->id_zasobu);
				Zasob::zrobDrzewo($aDrzewo[$i]['konar'], $aDrzewo[$i]['zasob']->getId());
				$i++;
			}
		}
	}
	
	public static function zrobDrzewoDlaUzytkownika(&$aDrzewo, $iIdUzytkownika, $iIdRodzica) {
		$oDbZasob = My_Db::factory('db_Zasob');
		$oDbUprawnienie = My_Db::factory('db_Uprawnienie');
		$oDb = Zend_Registry::get('db');
		
		$sSubQuery = $oDb->select()->from($oDbUprawnienie->getName())->where('id_uzytkownika = ?', $iIdUzytkownika);
		
		$sQuery = $oDb->select()->from(array('t1'=>$oDbZasob->getName()))->joinLeft(array('t2'=>$sSubQuery), 't1.id_zasobu = t2.id_zasobu', 'id_uzytkownika')->where('id_rodzica = ?', $iIdRodzica)->where('usuniety = ?', 0);		
			
		$oRowset = $oDb->fetchAll($sQuery);
		if($oRowset != null) {
			$i = 0;
			foreach($oRowset as $oRow) {
				$aZasob['id_zasobu'] = $oRow->id_zasobu;
				$aZasob['nazwa'] = $oRow->nazwa;
				if($iIdUzytkownika == $oRow->id_wlasciciela)
					$aZasob['prawo'] = 2;
				elseif($iIdUzytkownika == $oRow->id_uzytkownika)
					$aZasob['prawo'] = 1;
				else
					$aZasob['prawo'] = 0;
				
				$aDrzewo[$i]['zasob'] = $aZasob;
				
				Zasob::zrobDrzewoDlaUzytkownika($aDrzewo[$i]['konar'], $iIdUzytkownika, $aZasob['id_zasobu']);
				
				$i++;
			}
		}
	}
	
	public function usun() {
		if($this->iPrawo == 2) {
			$this->usunRekurencyjnie($this->iId);
			return true;
		}
		
		return false;
	}
	
	public function edytuj($sNazwa) {
		if($this->iPrawo >= 1) {
			$oZasob = My_Db::factory('db_Zasob');
			
			if($oZasob->update(array('nazwa' => $sNazwa), My_Db::pobierzAdapter()->quoteInto('id_zasobu = ?', $this->iId))) {
				$oFtp = new My_Ftp('ftp.60free.ovh.org', 'ishtaria', 'tKw4DePU', 'www/projekt_oi/');
				$sPath = $this->getPath();
				$oFtp->zmienNazwe($sPath.'/'.$this->sNazwa, $sPath.'/'.$sNazwa);
				
				$this->sNazwa = $sNazwa;
				
				return true;
			}
		}
		
		return false;
	}
	
	public static function dodajKatalog($aDane) {
		$oZasob = new Zasob($aDane['id_rodzica']);
		
		if($oZasob->getPrawo() >= 1) {
			$aDane['typ'] = 0;
			
			$oSesja = new Zend_Session_Namespace( 'zalogowanyUzytkownik' );
			$aDane['id_wlasciciela'] = $oSesja->oUzytkownik->getId();
	
			$oDbZasob = My_Db::factory('db_Zasob');
			if($oDbZasob->insert($aDane)) {
				$oFtp = new My_Ftp('ftp.60free.ovh.org', 'ishtaria', 'tKw4DePU', 'www/projekt_oi/');
				$oFtp->dodajKatalog($oZasob->getPath().'/'.$oZasob->getNazwa().'/'.$aDane['nazwa']);	
				return true;
			}
		}
			
		return false;
	}
	
	public static function dodajPlik($aDane, $sFilePath, $sFileName) {
		$oZasob = new Zasob($aDane['id_rodzica']);
		
		if($oZasob->getPrawo() >= 1) {
			$aDane['typ'] = 1;
			
			$oSesja = new Zend_Session_Namespace( 'zalogowanyUzytkownik' );
			$aDane['id_wlasciciela'] = $oSesja->oUzytkownik->getId();

			$oDbZasob = My_Db::factory('db_Zasob');
			if($oDbZasob->insert($aDane)) {
				$oFtp = new My_Ftp('ftp.60free.ovh.org', 'ishtaria', 'tKw4DePU', 'www/projekt_oi/'); 
				$oFtp->dodajPlik($oZasob->getPath().'/'.$oZasob->getNazwa(), $sFilePath, $sFileName);	
				return true;
			}
		}
			
		return false;
	}
		
	public function pobierz() {
		$oFtp = new My_Ftp('ftp.60free.ovh.org', 'ishtaria', 'tKw4DePU', 'www/projekt_oi/');
		$oFtp->pobierz('userfiles\\'.$this->sNazwa, $this->getPath().'/'.$this->sNazwa);

		header("Pragma: public");
		header("Expires: 0");
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header("Cache-Control: public");
		header("Content-Description: File Transfer");
		header("Content-Type: application/force-download");
		header("Content-Disposition: attachment; filename=\"".$this->sNazwa."\"");
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: " . filesize('userfiles\\'.$this->sNazwa));
		
		@readfile('userfiles\\'.$this->sNazwa);
		die();
		
		// download
		// @readfile('userfiles\\'.$this->sNazwa);
		$file = @fopen('userfiles\\'.$this->sNazwa,"rb");
		if ($file) {
		  while(!feof($file)) {
		    print(fread($file, 1024*8));
		    flush();
		    if (connection_status()!=0) {
		      @fclose($file);
		      die();
		    }
		  }
		  @fclose($file);
		}
		
		die;
		
		//header("Content-type: application/octet-stream");
  		//header("Content-Disposition: attachment; filename=".$this->sNazwa); 
     	//readfile('userfiles/'.$this->sNazwa);
	}

	private function usunRekurencyjnie($iIdZasobu) {
		$oZasob = My_Db::factory('db_Zasob');
		
		$sQuery = $oZasob->select()->where('id_rodzica = ?', $iIdZasobu);
		
		$oRowset = $oZasob->fetchAll($sQuery);
		
		if($oRowset != null)
			foreach($oRowset as $oRow)
				$this->usunRekurencyjnie($oRow->id_zasobu);
		
		$oZasob->update(array('usuniety' => '1'), My_Db::pobierzAdapter()->quoteInto('id_zasobu = ?', $iIdZasobu)); 
	}
		
	// return a path to containing folder w/o trailing slashes
	public function getPath() {
		$iIdRodzica = $this->iIdRodzica;

		$sPath = '';
		while ($iIdRodzica != 0) {
			if($oZasob = new Zasob($iIdRodzica)) {
				$iIdRodzica = $oZasob->getIdRodzica();
				$sPath = $oZasob->getNazwa().'/'.$sPath;
			} else
				return false;
		}
		
		if($sPath == '')
			return '.';
		else {
			return substr($sPath, 0, -1);
		}
	}
	
	public static function dodajPrawo($aData) {
		$oDbUprawnienie = My_Db::factory('db_Uprawnienie');
		
		$oDbUprawnienie->insert($aData);
	}
	
	public static function zabierzPrawo($iIdUzytkownika, $iIdZasobu) {
		$oDbUprawnienie = My_Db::factory('db_Uprawnienie');
		
		$oDbUprawnienie->delete(array(My_Db::pobierzAdapter()->quoteInto( 'id_uzytkownika = ?', $iIdUzytkownika ), My_Db::pobierzAdapter()->quoteInto( 'id_zasobu = ?', $iIdZasobu )));
	}
}

?>